手动向fabric通道中添加组织Org3 |
您所在的位置:网站首页 › fabric 组织 › 手动向fabric通道中添加组织Org3 |
向fabric网络通道中添加组织Org3 (1)使用密钥生成器cryptogen产生Org3的加密材料 Cryptogen generate –config=./org3-crypto.yaml (2)使用交易配置工具configtxgen生成Org3对应的配置材料 export FABRIC_CFG_PATH=$PWD (用来告诉configtxgen 去哪儿找configtx.yaml 文件) Configtxgen -printOrg Org3MSP > ../channel-artifacts/org3.json (3)拷贝排序节点的 MSP 材料到 Org3 的 crypto-config 目录下 Cp -r crypto-config/ordererOrganizations org3-artifacts/crypto-config/ (4)更新通道配置,首先设置ORDERER_CA和CHANNEL_NAME变量 export ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem export CHANNEL_NAME=mychannel (5)获取通道mychannel最新的配置区块 Peer channel fetch config config_block.pb -o orderer.example.com:7050 -c $CHANNEL_NAME --tls --cafile $ORDERER_CA (6)用configtxlator将通道配置解码为JSON格式,裁剪所有的头部、元数据、创建者签名等 configtxlator proto_decode –input config_block.pb –type common.Block | jq .data.data[0].payload.data.config > config.json (7)使用jq工具追加Org3的配置定义org3.json,生成modified_config.json文件 jq -s '.[0] * {"channel_group":{"groups":{"Application":{"groups": {"Org3MSP":.[1]}}}}}' config.json ./channel-artifacts/org3.json > modified_config.json CLI容器中目前包含两个json文件config.json(包含Org1和Org2两组织的配置文件)和modified_config.json(包含Org1,Org2,Org3总共3个组织的配置文件)。 (8)将config.json和modified_config.json编码成config.pb和modified_config.pb格式 Configtxlator proto_encode –input config.json –type common.Config –output config.pb Configtxlator proto_encode –input modified_json –type common.Config –output modified_json.pb (9)计算两个pb文件的差异,输出新的pb文件,即org3_update.pb Configtxlator compute_update –channel_id $CHANNEL_NAME –original config.pb –updated modified_config.pb –output org3_update.pb (10)将org3_update.pb解码成org3_update.json Configtxlator proto_decode –input org3_update.pb –type common.ConfigUpdate | jq . > org3_update.json (11)把之前裁剪掉的头部信息还原回来,生成新文件org3_update_in_envelope.json echo ‘{“payload”:{“header”:{“channel_header”:{“channel_id”:”mychannel”, “type”:2}},”data”:{“config_update”:’$(cat org3_update.json)’}}}’ | jq . > org3_update_in_envelope.json (12)把org3_update_in_envelope.json转换为pb格式 Configtxlator proto_encode –input org3_update_in_envelope.json –type common.Envelope –output org3_update_in_envelope.pb (13)分别配置Org1和Org2管理员签名更新org3_update_in_envelope.pb Peer channel signconfigtx -f org3_update_in_envelope.pb 切换到Org2MSP环境,然后执行 Peer channel signconfigtx -f org3_update_in_envelope.pb (14)更新channel Peer channel update -f org3_update_in_envelope.pb -c $CHANNEL_NAME -o orderer.example.com:7050 –tls true –cafile $ORDERER_CA (15)配置领导节点选举(默认设置为动态领导选举) 新加入的节点是根据初始区块启动的,初始区块是不包含通道配置更新中新加入的组织信息 的。因此新的节点无法利用 gossip 协议,因为它们无法验证从自己组织里其他节点发送过 来的区块,除非它们接收到将组织加入到通道的那个配置交易。新加入的节点必须有以下配 置之一才能从排序服务接收区块: 1. 采用静态领导者模式,将节点配置为组织的领导者 CORE_PEER_GOSSIP_USELEADERELECTION=false CORE_PEER_GOSSIP_ORGLEADER=true 2. 采用动态领导者选举,配置节点采用领导选举的方式: CORE_PEER_GOSSIP_USELEADERELECTION=true CORE_PEER_GOSSIP_ORGLEADER=false (16)将org3加入通道channel-mychannel 1. 打开新的终端启动Org3 docker compose: Docker-compose -f docker-compose-org3.yaml up -d 2. 导出两个关键变量 export ORDERER_CA= /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem && export CHANNEL_NAME=mychannel 3. 向排序服务发送一个获取 mychannel 初始区块的请求。如果通道更新成功执行,排序服务会成功校验这个请求中 Org3 的签名。如果 Org3 没有成功地添加到通 道配置中,排序服务会拒绝这个请求。 Peer channel fetch 0 mychannel.block -o orderer.example.com:7050 -c $CHANNEL_NAME –tls –cafile $ORDERER_CA 4. 将peer0将入到通道中 peer channel join -b mychannel.block 切换环境,把peer1加入到channel中 export CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org3.example.com/peers/peer1.org3.example.com/tls/ca.crt && export CORE_PEER_ADDRESS=peer1.org3.example.com:12051 peer channel join -b mychannel.block
(17)升级和调用链码,升级背书策略以加入Org3 在Org3cli安装:peer chaincode install -n mycc -v 2.0 -p github.com/chaincode/chaincode_example02/go/ 在原始cli安装:peer chaincode install -n mycc -v 2.0 -p github.com/chaincode/chaincode_example02/go/ 在原始cli升级背书策略:peer chaincode upgrade -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA -C $CHANNEL_NAME -n mycc -v 2.0 -c '{"Args":["init","a","90","b","210"]}' -P "OR ('Org1MSP.peer','Org2MSP.peer','Org3MSP.peer')" 在Org3cli中查询链码:peer chaincode query -n mycc -C $CHANNEL_NAME -c '{"Args":["query","a"]}' 在Org3cli中调用链码:peer chaincode invoke -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA -C $CHANNEL_NAME -n mycc -c '{"Args":["invoke","a","b","10"]}' |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |